/*
工具函数包
 */
 //引入xml2js  专门讲xml转为json
const {parseString}=require('xml2js')
// 引入fs
const {writeFile,readFile}=require('fs');

const {resolve}=require('path');

module.exports={
    getUserDataAsync (req) {
        /*
            获取用户发送的信息，信息以流式数据发送
         */
        //因为数据获取 是异步的，我们要保证执行完，所以要在外面包裹一层Promise对象
        return new Promise((resolve,reject)=>{
            let xmlData=''
            req.on('data',data => {
                // 当流式数据传递过来的时候，触发事件，将数据注入到回调函数中，可能流式数据过来多次，我们要把数据拼起来
                // console.log(data)
                // 这个data是一个 buffer类型。要转成字符串 data.toString()
                xmlData+=data.toString();
            })
            .on('end',()=>{
                // 当数据接受完毕时，会触发
                resolve(xmlData);
            })
        })
    },

    parseXmlAsync(xmlData){
        return new Promise((resolve,reject)=>{
            parseString(xmlData,{trim:true},(err,data)=>{
                if(!err){
                    resolve(data)
                }else{
                    reject('parseString方法除了问题:'+err)
                }
            })
        })
    },

    formatMessage (jsData){
        let message={};
        //获取xml对象
        jsData=jsData.xml;
        //为了防止jsData undefind，判断数据是否是一个对象
        if(typeof jsData == 'object'){
            //便利对象
            for(let key in jsData){
                //获取属性值
                let value=jsData[key];
                //过滤空数据
                if(Array.isArray(value) && value.length>0){
                    //将合法的数据 挂载到 message上
                    message[key]=value[0]
                }
            }
        }

        return message;
    },

    writeFileAsync(data,fileName){
        /*
       *  文件  数据
       *
       *  accessToken 不能直接写，要不不会变成【object】
       *  writeFile是异步方法
       * */
        const filePath=resolve(__dirname,fileName);//使用绝对路径 解决生成文件乱跑问题
        return  new Promise((resolve,reject)=>{
            data=JSON.stringify(data);
            writeFile(filePath, data, err=>{
                if(!err){
                    console.log('文件保存成功');
                    resolve(data);
                }else{
                    reject('writeFileAsync方法除了问题：'+err);
                }
            })
        })
    },

    readFileAsync(fileName){
        /*
        *  文件  数据
        *  readFile是异步方法
        * */
        const filePath=resolve(__dirname,fileName); //使用绝对路径 解决生成文件乱跑问题
        return  new Promise((resolve,reject)=>{
            readFile(filePath, (err,data)=>{
                if(!err){
                    console.log('文件读取成功');
                    //将json字符串 转成  js对象
                    data=JSON.parse(data);
                    resolve(data);
                }else{
                    console.log('文件读取失败');
                    reject('readFileAsync方法除了问题：'+err);
                }
            })
        })
    }
}